package com.nd.android.musicboxlibrary.ui.common;

import android.content.Context;
import android.os.Handler;
import android.text.TextUtils;
import android.widget.ImageView;

import com.nd.android.musicboxlibrary.R;
import com.nd.android.musicboxlibrary.business.comm.MagicNumber;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;

/**
 * 图片加载工具 <br>
 * Created 2014年7月13日 上午12:06:22
 * 
 * @version
 * @author wat.ztag
 * 
 * @see
 */
public final class ImageLoaderUtil implements MagicNumber {

	/**
	 * 
	 * <br>Created 2014年11月28日 上午12:05:46
	 * @author       wat.ztag
	 */
	@Override
	public void initMagicNumber() {
	}

	/**
	 * Creates a new instance of ImageLoaderUtil. <br>
	 * Created 2014年9月15日 下午11:12:16
	 */
	private ImageLoaderUtil() {
	}

	/**
	 * init image loader
	 * @param context Context
	 * @return
	 */
	public static void initImageLoader(Context context) {
		// This configuration tuning is custom. You can tune every option, you
		// may tune some of them,
		// or you can create default configuration by
		// ImageLoaderConfiguration.createDefault(this);
		// method.
		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
		.threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory()
		.discCacheFileNameGenerator(new Md5FileNameGenerator())
		.tasksProcessingOrder(QueueProcessingType.LIFO).writeDebugLogs() // Remove for
		// release app
		.build();
		// Initialize ImageLoader with configuration.
		ImageLoader.getInstance().init(config);
	}

	/**
	 * 加载显示图片
	 * @param uri String
	 * @param imageView ImageView
	 * @return
	 */
	public static void displayPic(String uri, ImageView imageView) {
		displayPic(uri, imageView, 0);
	}

	/**
	 * 加载显示图片
	 * @param uri String
	 * @param imageView ImageView
	 * @return
	 */
	public static void displayPicRound(String uri, ImageView imageView) {
		displayPic(uri, imageView, n100);
	}

	/**
	 * 加载显示图片
	 * 
	 * @param uri String
	 * @param imageView ImageView
	 * @param roundPixels int
	 *            圆角控制，100圆形，0不做处理
	 */
	public static void displayPic(String uri, ImageView imageView, int roundPixels) {
		if (TextUtils.isEmpty(uri)) {
			return;
		}
		ImageLoader imageLoader = ImageLoader.getInstance();
		DisplayImageOptions options = null;
		if(roundPixels > 0){
			options = new DisplayImageOptions.Builder().cacheInMemory(true)
					.cacheOnDisc(true).displayer(new RoundedBitmapDisplayer(roundPixels)).build();
		}else{//by jiangwb 修改bug 61241 
			options = new DisplayImageOptions.Builder()
			.cacheInMemory(true)
			.cacheOnDisc(true)
			.displayer(new SimpleBitmapDisplayer()) // default
			.build();
		}
		imageLoader.displayImage(uri, imageView, options);
	}

	/**
	 * 加载大图
	 * 
	 * @param uri String
	 * @param imageView ImageView
	 * @param listener ImageLoadingListener
	 */
	public static void displayPic(String uri, ImageView imageView, ImageLoadingListener listener) {
		if (TextUtils.isEmpty(uri)) {
			return;
		}
		ImageLoader imageLoader = ImageLoader.getInstance();
		DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
				.showStubImage(R.drawable.mbx_ic_empty).cacheOnDisc(true).build();
		imageLoader.displayImage(uri, imageView, options, listener);
	}

	/**
	 * 
	 * <br>
	 * Created 2014年9月15日 下午11:12:22
	 * 
	 * @param uri String
	 * @param listener SimpleImageLoadingListener
	 * @author wat.ztag
	 */
	public static void loadImage(String uri, SimpleImageLoadingListener listener) {
		if (TextUtils.isEmpty(uri)) {
			return;
		}
		ImageLoader imageLoader = ImageLoader.getInstance();
		DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
				.showStubImage(R.drawable.mbx_ic_empty).cacheOnDisc(true).build();
		imageLoader.loadImage(uri, options, listener);
	}

}
